home *** CD-ROM | disk | FTP | other *** search
Text File | 1989-05-15 | 60.0 KB | 2,113 lines |
-
-
-
- fig 4.1 LINE NUMBER ALLOCATION FOR THE PROGRAM
-
- 10 Heading, manual overhead
- 50 Subroutines most commonly used.
- 200 MAP (COMPUTER) ROUTINE
- 300 LRS LONG RANGE SENSOR SCAN ROUTINE
- 400 SRS SHORT RANGE SENSORS
- 800 PHA PHASERS
- 1000 TOR PHOTON TORPEDOES
- 1300 NAV WARP ENGINES/NAVIGATION
- 1900 COM COMPUTER MAIN ROUTINE
- 2500 VIS VISUAL
- 2600 RES RESIGN
- 2700 SHE SHIELDS
- 2800 DAM DAMAGE CONTROL
- 3000 Main (PLAYGAME) Loop
- 3600 TRA TRANSPORTER
- 3800 SHU SHUTTLECRAFT
- 4300 LRP LONG RANGE PROBE LAUNCH
- 4500 Initialisation Sequence
- 5000 SAV SAVE THE GAME
- 5500 LSG LOAD A SAVED GAME
- 6000 Error Trapping and Recovery Routines
- 9000 Endgame
- 10000 Dummy subroutines used during program testing/integration
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- fig 4.2 OUTLINE FOR THE PROGRAM
-
- 10 REM STARTREK VERSION XX-YY-ZZ
- 200 REM MAP (COMPUTER) ROUTINE
- 210 GOTO 10000
- 300 REM LRS LONG RANGE SENSOR SCAN ROUTINE
- 310 GOTO 10000
- 400 REM SRS SHORT RANGE SENSORS
- 410 GOTO 10000
- 800 REM PHA PHASERS
- 810 GOTO 10000
- 1000 REM TOR PHOTON TORPEDOES
- 1010 GOTO 10000
- 1300 REM NAV WARP ENGINES/NAVIGATION
- 1310 GOTO 10000
- 1900 REM MAIN COMPUTER ROUTINE
- 1910 GOTO 10000
- 2500 REM VIS VISUAL
- 2510 GOTO 10000
- 2600 REM RES RESIGN
- 2610 GOTO 10000
- 2700 REM SHE SHIELDS
- 2710 GOTO 10000
- 2800 REM DAM DAMAGE CONTROL
- 2810 GOTO 10000
- 3000 REM MAIN LOOP
- 3600 REM TRA TRANSPORTER
- 3610 GOTO 10000
- 3800 REM SHU SHUTTLECRAFT
- 3810 GOTO 10000
- 4300 REM LRP LONG RANGE PROBE LAUNCH
- 4310 GOTO 10000
- 4500 REM INITIALISATION SEQUENCE
- 5000 REM SAV SAVE THE GAME
- 5010 GOTO 10000
- 5500 REM LSG LOAD A SAVED GAME
- 5510 GOTO 10000
- 6000 REM ERROR TRAPPING/RECOVERY
- 9000 REM ENDGAME
- 9010 END
- 10000 REM DUMMY ROUTINES USED DURING PROGRAM TESTING/INTEGRATION
- 10001 PRINT "FUNCTION NOT PROGRAMMED AT THIS TIME" : RETURN
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- fig 4.3 FLOWCHART FOR INITIALISING THE VARIABLES
-
- : INITIALISE.VARIABLES
-
- DISPLAY STARTING MESSAGES
- SET.UP.CONSTANTS.PARAMETERS.&.VARIABLES (4500)
- ZERO.ALL.FLAGS (4660)
- LOOP (number of rows) (4670)
- + LOOP (number of colums in each row)
- + + COMPUTE.NUMBER.OF.STARS (4790)
- + + STARBASE.PRESENT =? (4800)
- + + YES (1) SUM.TOTAL.OF.STARBASES
- + + THEN (1)
- + + COMPUTE.NUMBER.OF.KLINGONS (4810)
- + + SUM.TOTAL.OF.KLINGONS
- + LOOPEND
- LOOPEND
- LOOP ( until number of Klingons sufficient) (4710)
- + COMPUTE.RANDOM.QUADRANT.IN.GALAXY
- + CONTAINS.KLINGONS.OR.STARBASE =?
- + NO (2) COMPUTE.NUMBER.OF.STARS
- + COMPUTE.NUMBER.OF.KLINGONS
- + SUM.TOTAL.OF.KLINGONS
- + COMPUTE.IF.STARBASE.PRESENT.IN.QUADRANT
- + STARBASE.PRESENT =?
- + YES (3) SUM.TOTAL.OF.STARBASES
- + THEN (3)
- + THEN (2)
- LOOPEND
- IS.NUMBER.OF.KLINGONS.MORE.THAN.30 =?
- YES (4) SET.TOTAL.TIME.=.NUMBER.OF.KLINGONS (4740)
- NO (4) SET.TOTAL.TIME.=.30
- THEN (4)
- SET.INITIAL.TIME.PARAMETER (4750)
- SUM.OF.STARBASES.0 =?
- YES (5) COMPUTE.RANDOM.QUADRANT.INSIDE.THE.GALAXY
- PUT.STARBASE.IN.THAT.QUADRANT
- TOTAL.OF.STARBASES.=.1
- THEN (5)
- COMPUTE.RANDOM.QUADRANT.INSIDE.THE.GALAXY (4760)
- POSITION.ENTERPRISE.IN.THAT.QUADRANT
- SET.UP.CONTENTS.OF.QUADRANT (4770)
- SET.UP.CONDITION ; (4780)
-
- The numbers in parentheses at the end of some lines refer to
- the line numbers in the BASIC language implementation of the flow
- chart.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- FIG4.4 BASIC LANGUAGE IMPLEMENTATION OF INITIALISATION/STARTUP SEQUENCE
-
- 10 PRINT CHR$(26) : PRINT " STARTREK VERSION 83-05-28 : ON ERROR GOTO 6000
- 20 PRINT : PRINT "By Joe Kasser" : PRINT : GOSUB 4500 : GOSUB 4660
- 30 PRINT : PRINT K9/100;"Klingons have invaded Federation territory" : PRINT
- 40 PRINT "Your mission is to destroy them in";T;"Stardates" : GOTO 3000
-
-
- 4500 REM INITIALISATION SEQUENCE
- 4510 Z=1 : S$=".*EKB" : E0=4000 : C1=14 : C2=5
- 4520 DIM D(C1),D$(C1),Q(7,7),S(7,7),K1(7),K2(7),K3(7),S8(7,7)
- 4530 PRINT "Welcome to the Starfleet Academy Command Training"
- 4540 PRINT "Simulator. You are assigned the role of the captain"
- 4550 PRINT "of the Starship Enterprise."
- 4560 PRINT : PRINT "For assistance, type HELP or read the manual"
- 4570 D$(0)="WARP ENGINES " :D$(1)="SHORT RANGE SENSORS " :D$(2)="LONG RANGE SENSORS " :D$(3)="PHASERS "
- 4580 D$(4)="PHOTON TORPEDOES " :D$(5)="COMPUTER " :D$(6)="SHIELDS " :D$(7)="LONG RANGE PROBES "
- 4590 D$(8)="TRANSPORTER " :D$(9)="SHUTTLECRAFT " :D$(10)="DAMAGE CONTROL " :D$(11)="VISUAL " :D$(12)="RESIGN"
- 4600 D$(13)="SAVE THE STATE OF THE GAME" : D$(14)="LOAD A SAVED GAME"
- 4610 C1$="NAVSRSLRSPHATORCOMSHELRPTRASHUDAMVISRESSAVLSGMAPKSTSCA" : C2$="MAPSTAKSTDIRSCA"
- 4620 C3$(0)="MAP" : C3$(1)="STAtus (Score)" : C3$(2)="KLINGON STatus"
- 4630 C3$(3)="DIRECTION/DISTANCE calculator" : C3$(4)="Sector/System SCAn"
- 4650 RETURN
- 4660 C9=0 : K4=0 : K5=0 : F9=0 : G9=0 : K9=0 : B9=0 : L3=0 : GOSUB 3550
- 4670 FOR I=0 TO 7 : FOR J=0 TO 7 : GOSUB 4790 : Q(I,J)=-(K+B+S) : NEXT J : NEXT I
- 4710 IF K9>2000 THEN 4740
- 4720 GOSUB 50 : IF Q(X,Y)<-9 THEN 4720
- 4730 GOSUB 4790 : Q(X,Y)=-(K+B+S) : GOTO 4710
- 4740 IF K9/100<30 THEN T=30 ELSE T=K9/100
- 4750 T9=T+Z : IF B9=0 THEN GOSUB 50 : Q(X,Y)=Q(X,Y)-10 : B9=10
- 4760 GOSUB 50 : Q1=X : Q2=Y : GOSUB 3200 : GOSUB 90 : E1=E0/10 : GOSUB 3400 : RETURN
- 4790 S=INT(RND(Z)*7+Z)
- 4800 B=0 : IF RND(Z)<.02 THEN B=10 : B9=B9+B
- 4810 K=0 : IF RND(Z)<.06 THEN K=INT(RND(Z)*8)*100 : K9=K9+K : K8=K9
- 4830 RETURN
-
-
- FIGURE 4.5 SUPPLIMENTARY INITIALISATION SUBROUTINES
-
- 50 REM SUBROUTINE TO SET UP 2 RANDOM CO-ORDINATES
- 60 X=INT(RND(Z)*8) : Y=INT(RND(Z)*8) : RETURN
-
- 90 REM SUBROUTINE TO SET UP ENTERPRISE PARAMETERS
- 100 E=E0 : E1=0 : P=10 : RETURN
-
- 3200 REM SUBROUTINE TO SET UP QUADRANT
- 3340 RETURN
-
- 3400 REM SUBROUTINE TO SET UP CONDITION
- 3540 RETURN
-
- 3550 REM SUBROUTINE TO REPAIR ALL SUB-SYSTEMS
- 3560 FOR I = 0 TO C1-C2 : D(I)=0 : NEXT : RETURN
-
-
-
-
-
-
-
-
-
-
-
-
-
- FIGURE 4.6 FLOWCHART FOR THE PLAY.THE.GAME LOOP
-
- : PLAY.THE.GAME (3000)
-
- LAST.COMMAND.MOVE =? (3020)
- SHORT.RANGE.SENSORS.DAMAGED =?
- YES (1) PERFORM.A.VISUAL.SCAN
- NO (1) PERFORM.A.SHORT.RANGE.SENSOR.SCAN
- THEN (1)
- PROMPT.FOR.CHOICE (3050)
- WAIT.FOR.REPLY
- IS.REPLY.<.3.CHARACTERS =?
- YES (2) DISPLAY.ERROR.PROMPT
- NO (2) IS.COMMAND.VALID =? (3060)
- YES (3) PERFORM.IT (3080)
- NO (3) DISPLAY.COMMAND.PROMPT
- THEN (3)
- THEN (2) ;
- GAME.OVER.FLAG.SET =? (3090)
- NO (4) LAST.COMMAND.SRS/VIS/KST =?
- NO (5) KLINGONS.IN.QUADRANT =? (3100)
- YES (6) MOVE.KLINGONS
- BACKFIRE
- THEN (6)
- THEN (5)
- THEN (4) ;
-
- FIGURE 4.7 BASIC LANGUAGE IMPLEMENTATION OF THE PLAY.THE.GAME LOOP
-
- 3000 REM-MAIN LOOP
- 3020 IF C9=0 THEN I=Z : IF D(Z)=0 THEN GOSUB 400 ELSE I=11 : GOSUB 2500
- 3040 PRINT
- 3050 INPUT "COMMAND ";A$ : IF LEN(A$)<3 THEN PRINT "BEG PARDON CAPTAIN (3 letters please) " : GOTO 3050
- 3060 FOR I=0 TO LEN(C1$)/3-Z : IF A$=MID$(C1$,(I*3)+Z,3) THEN 3080
- 3070 NEXT : FOR I=0 TO C1 : PRINT MID$(C1$,(I*3)+Z,3); TAB(8);D$(I) : NEXT :
- C9=99 : GOTO 3000
- 3080 C9=I : ON I+Z GOSUB 1300,400,300,800,1000,1900,2700,4300,3600,3800,2800,2500,2600,5000,5500,200,1980,2360
- 3090 IF F9>0 THEN 9000 ELSE PRINT : IF C9=Z THEN 3110
- 3100 IF K>0 THEN GOSUB 700 : GOSUB 600 : IF F9>0 THEN 9000
- 3110 GOTO 3000
-
- 600 REM BACKFIRE SUBROUTINE
- 680 RETURN
-
- 700 REM MOVE KLINGON ROUTINE
- 740 RETURN
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- FIGURE 4.8 PROGRAM AT END OF CHAPTER 4
-
- 10 PRINT CHR$(26) : PRINT " STARTREK VERSION 83-06-12 : ON ERROR GOTO 6000
- 20 PRINT : PRINT "By Joe Kasser" : PRINT : GOSUB 4500 : GOSUB 4660
- 30 PRINT : PRINT K9/100;"Klingons have invaded Federation territory" : PRINT
- 40 PRINT "Your mission is to destroy them in";T;"Stardates" : GOTO 3000
- 50 REM SUBROUTINE TO SET UP 2 RANDOM CO-ORDINATES
- 60 X=INT(RND(Z)*8) : Y=INT(RND(Z)*8) : RETURN
- 90 REM SUBROUTINE TO SET UP ENTERPRISE PARAMETERS
- 100 E=E0 : E1=0 : P=10 : RETURN
- 200 REM MAP (COMPUTER) ROUTINE
- 210 GOTO 10000
- 300 REM LRS LONG RANGE SENSOR SCAN ROUTINE
- 310 GOTO 10000
- 400 REM SRS SHORT RANGE SENSORS
- 410 GOTO 10000
- 600 REM BACKFIRE SUBROUTINE
- 680 RETURN
- 700 REM MOVE KLINGON ROUTINE
- 740 RETURN
- 800 REM PHA PHASERS
- 810 GOTO 10000
- 1000 REM TOR PHOTON TORPEDOES
- 1010 GOTO 10000
- 1300 REM NAV WARP ENGINES/NAVIGATION
- 1310 GOTO 10000
- 1900 REM MAIN COMPUTER ROUTINE
- 1910 GOTO 10000
- 2500 REM VIS VISUAL
- 2510 GOTO 10000
- 2600 REM RES RESIGN
- 2610 GOTO 10000
- 2700 REM SHE SHIELDS
- 2710 GOTO 10000
- 2800 REM DAM DAMAGE CONTROL
- 2810 GOTO 10000
- 3000 REM MAIN LOOP
- 3020 IF C9=0 THEN I=Z : IF D(Z)=0 THEN GOSUB 400 ELSE I=11 : GOSUB 2500
- 3040 PRINT
- 3050 INPUT "COMMAND ";A$ : IF LEN(A$)<3 THEN PRINT "BEG PARDON CAPTAIN (3 letters please) " : GOTO 3050
- 3060 FOR I=0 TO LEN(C1$)/3-Z : IF A$=MID$(C1$,(I*3)+Z,3) THEN 3080
- 3070 NEXT : FOR I=0 TO C1 : PRINT MID$(C1$,(I*3)+Z,3); TAB(8);D$(I) : NEXT : C9=99 : GOTO 3000
- 3080 C9=I : ON I+Z GOSUB 1300,400,300,800,1000,1900,2700,4300,3600,3800,2800,2500,2600,5000,5500,200,1980,2360
- 3090 IF F9>0 THEN 9000 ELSE PRINT : IF C9=Z THEN 3110
- 3100 IF K>0 THEN GOSUB 700 : GOSUB 600 : IF F9>0 THEN 9000
- 3110 GOTO 3000
- 3200 REM SUBROUTINE TO SET UP QUADRANT
- 3340 RETURN
- 3400 REM SUBROUTINE TO SET UP CONDITION
- 3540 RETURN
- 3550 REM SUBROUTINE TO REPAIR ALL SUB-SYSTEMS
- 3560 FOR I = 0 TO C1-C2 : D(I)=0 : NEXT : RETURN
- 3600 REM TRA TRANSPORTER
- 3610 GOTO 10000
- 3800 REM SHU SHUTTLECRAFT
-
-
-
-
-
-
-
-
-
-
-
- 3810 GOTO 10000
- 4300 REM LRP LONG RANGE PROBE LAUNCH
- 4310 GOTO 10000
- 4500 REM INITIALISATION SEQUENCE
- 4510 Z=1 : S$=".*EKB" : E0=4000 : C1=14 : C2=5
- 4520 DIM D(C1),D$(C1),Q(7,7),S(7,7),K1(7),K2(7),K3(7),S8(7,7),C3$(4)
- 4530 PRINT "Welcome to the Starfleet Academy Command Training"
- 4540 PRINT "Simulator. You are assigned the role of the captain"
- 4550 PRINT "of the Starship Enterprise."
- 4560 PRINT : PRINT "For assistance, type HELP or read the manual"
- 4570 D$(0)="WARP ENGINES " :D$(1)="SHORT RANGE SENSORS " :D$(2)="LONG RANGE SENSORS " :D$(3)="PHASERS "
- 4580 D$(4)="PHOTON TORPEDOES " :D$(5)="COMPUTER " :D$(6)="SHIELDS " :D$(7)="LONG RANGE PROBES "
- 4590 D$(8)="TRANSPORTER " :D$(9)="SHUTTLECRAFT " :D$(10)="DAMAGE CONTROL " :D$(11)="VISUAL " :D$(12)="RESIGN"
- 4600 D$(13)="SAVE THE STATE OF THE GAME" : D$(14)="LOAD A SAVED GAME"
- 4610 C1$="NAVSRSLRSPHATORCOMSHELRPTRASHUDAMVISRESSAVLSGMAPKSTSCA" : C2$="MAPSTAKSTDIRSCA"
- 4620 C3$(0)="MAP" : C3$(1)="STAtus (Score)" : C3$(2)="KLINGON STatus"
- 4630 C3$(3)="DIRECTION/DISTANCE calculator" : C3$(4)="Sector/System SCAn"
- 4650 RETURN
- 4660 C9=0 : K4=0 : K5=0 : F9=0 : G9=0 : K9=0 : B9=0 : L3=0 : GOSUB 3550
- 4670 FOR I=0 TO 7 : FOR J=0 TO 7 : GOSUB 4790 : Q(I,J)=-(K+B+S) : NEXT J : NEXT I
- 4710 IF K9>2000 THEN 4740
- 4720 GOSUB 50 : IF Q(X,Y)<-9 THEN 4720
- 4730 GOSUB 4790 : Q(X,Y)=-(K+B+S) : GOTO 4710
- 4740 IF K9/100<30 THEN T=30 ELSE T=K9/100
- 4750 T9=T+Z : IF B9=0 THEN GOSUB 50 : Q(X,Y)=Q(X,Y)-10 : B9=10
- 4760 GOSUB 50 : Q1=X : Q2=Y : GOSUB 3200 : GOSUB 90 : E1=E0/10 : GOSUB 3400 : RETURN
- 4790 S=INT(RND(Z)*7+Z)
- 4800 B=0 : IF RND(Z)<.02 THEN B=10 : B9=B9+B
- 4810 K=0 : IF RND(Z)<.06 THEN K=INT(RND(Z)*8)*100 : K9=K9+K : K8=K9
- 4830 RETURN
- 5000 REM SAV SAVE THE GAME
- 5010 GOTO 10000
- 5500 REM LSG LOAD A SAVED GAME
- 5510 GOTO 10000
- 6000 REM ERROR TRAPPING/RECOVERY
- 9000 REM ENDGAME
- 9010 END
- 10000 REM DUMMY ROUTINES USED DURING PROGRAM TESTING/INTEGRATION
- 10001 PRINT "FUNCTION NOT PROGRAMMED AT THIS TIME" : RETURN
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- FIGURE 5.1 FLOWCHART FOR THE DAMAGE.CONTROL COMMAND
-
- : DAMAGE.CONTROL (2800)
-
- DISPLAY.HEADING (2810)
- ANY.SUBSYSTEM.DAMAGED =? (2820)
- YES (1) LOOP (number of sub-systems) (2850)
- + SUB.SYSTEM.DAMAGED =?
- + YES (2) DISPLAY.ESTIMATED.REPAIR.TIME
- + THEN (2)
- LOOPEND (2860)
- KLINGONS.IN.QUADRANT =? (Battle going on ? )
- NO (3) REPAIR.TIME.ALLOCATION.DIALOG (2870)
- LOOP (number of sub-systems) (2880)
- + IS.SUB.SYSTEM.DAMAGED =?
- + YES (4) ADJUST.REPAIR.TIME.FOR.SUB-SYSTEM (2890)
- + REPAIR.TIME.=<.0 =?
- + YES (5) SET.IT.TO.0
- + DISPLAY.REPAIRED.STATUS.MESSAGE
- + THEN (5)
- + THEN (4)
- LOOPEND (2900)
- UPDATE DAYS LEFT
- THEN (3)
- NO (1) DISPLAY.ALL.OK.MESSAGE
- THEN (1) ; (2910)
-
- FIGURE 5.2 BASIC LANGUAGE IMPLEMENTATION OF DAMAGE CONTROL COMMAND
-
- 2800 REM DAM DAMAGE CONTROL
- 2810 GOSUB 70 : D8=0
- 2820 FOR I=0 TO C1-C2 : IF D(I)>0 THEN D8=D8+Z
- 2830 NEXT: PRINT : IF D8=0 THEN PRINT : PRINT "ALL SYSTEMS A-OK !": GOTO 2910
- 2840 PRINT "SYSTEM";TAB(28);"ETR" : PRINT
- 2850 FOR I=0 TO C1-C2 : IF D(I)>0 THEN PRINT D$(I);TAB(28);INT(D(I)+Z)
- 2860 NEXT : IF K>0 THEN 2910
- 2870 PRINT :INPUT "HOW MANY DAYS TO SPEND ON REPAIRS SIR ";D8 : IF D8<0 THEN D8=0
- 2880 FOR I=0 TO C1-C2 : IF D(I)=0 THEN 2900
- 2890 D(I)=D(I)-D8 : IF D(I)=<0 THEN D(I)=0 : PRINT D$(I); "REPAIRED"
- 2900 NEXT : T=T-D8
- 2910 RETURN
-
- 70 REM SUB TO PRINT HEADING
- 80 PRINT : PRINT D$(I);"AT QUADRANT";Q1+Z;",";Q2+Z : PRINT : RETURN
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- FIGURE 5.3 FLOWCHART FOR THE MAP COMMAND
-
- : MAP (200)
-
- IS.MAP.DAMAGED =? (210)
- YES (1) DISPLAY.DAMAGED.MESSAGE
- NO (1) DISPLAY.HEADING (220)
- DISPLAY.COLUMN.NUMBERS
- LOOP (on rows in galaxy)
- + DISPLAY.ROW.NUMBER
- + LOOP (on columns) (230)
- + IS.ENTERPRISE.IN.QUADRANT =?
- + + YES (2) IS.QUADRANT.SCANNED =?
- + + NO (3) DISPLAY.UNSCANNED.PINPOINT.LOCATION
- + + THEN (3)
- + + THEN (2)
- + + IS.QUADRANT.UNSCANNED =? (240)
- + + YES (4) DISPLAY.BLANK.QUADRANT
- + + NO (4) IS.ENTERPRISE.IN.QUADRANT (250)
- + + YES (5) DISPLAY.SCANNED.PINPOINT.LOCATION
- + + NO (5) DISPLAY.CONTENTS.OF.QUADRANT (260)
- + + THEN (5)
- + + THEN (4) DISPLAY."SPACE"
- + LOOPEND (270)
- + ADVANCE.DISPLAY.TO.NEXT.LINE
- LOOPEND
- THEN (1) ; (280)
-
-
- FIGURE 5.4 BASIC LANGUAGE IMPELEMENTATION OF THE MAP SUBROUTINE
-
- 200 REM MAP (COMPUTER) ROUTINE
- 210 I=5 : IF D(I)>0 THEN PRINT "COMPUTER DOWN AT THIS TIME " : GOTO 280
- 220 GOSUB 70 : FOR I=0 TO 7 : PRINT TAB((Z+I)*5);I+Z; : NEXT : PRINT : FOR I=0 TO 7 : PRINT I+Z ;
- 230 FOR J=0 TO 7 : PRINT " "; : IF I=Q1 AND J=Q2 AND Q(I,J)<0 THEN PRINT CHR$(8);"+***+"; : GOTO 270
- 240 IF Q(I,J)<0 THEN PRINT "*** "; : GOTO 270
- 250 E$=STR$(Q(I,J)) : E$=" 00"+MID$(E$,2) : IF I=Q1 AND J=Q2 THEN PRINT CHR$(8);"+";RIGHT$(E$,3);"+"; : GOTO 270
- 260 PRINT RIGHT$(E$,3);" ";
- 270 NEXT J : PRINT : NEXT I
- 280 RETURN
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- FIGURE 5.5 FLOWCHART FOR THE LONG RANGE SENSORS COMMAND
-
- : LONG.RANGE.SENSORS (300)
-
- ARE.SENSORS.DAMAGED =? (310)
- YES (1) DISPLAY.DAMAGED.MESSAGE
- NO (1) DISPLAY.HEADING (320)
- LOOP (on rows -/+ position)
- + LOOP (on columns -/+ position in row)
- + + DISPLAY.SPACE.CHARACTER
- + + QUADRANT.IN.GALAXY =? (330)
- + + YES (2) COMPUTER.DAMAGED =? (340)
- + + NO (3) SCAN.QUADRANT
- + + THEN (3)
- + + DISPLAY.CONTENTS.OF.QUADRANT (350)
- + + NO (2) DISPLAY.ZERO.QUADRANT
- + + THEN (2)
- + LOOPEND (360)
- + ADVANCE.DISPLAY.TO.NEXT.LINE
- LOOPEND
- THEN (1) ;
-
- FIGURE 5.6 BASIC LANGUAGE VERSION OF LONG RANGE SENSORS SUBROUTINE
-
- 300 REM LRS LONG RANGE SENSOR SCAN ROUTINE
- 310 IF D(I)>0 THEN PRINT D$(I); " DAMAGED" : GOTO 370
- 320 GOSUB 70 : FOR I=Q1-Z TO Q1+Z : FOR J=Q2-Z TO Q2+Z: PRINT " ";
- 330 IF I<0 OR I>7 OR J<0 OR J>7 THEN PRINT "***" ; : GOTO 360
- 340 IF D(5)=0 THEN Q(I,J)=ABS(Q(I,J))
- 350 E$=STR$(Q(I,J)) : E$="00"+MID$(E$,2) : PRINT RIGHT$(E$,3);
- 360 NEXT J : PRINT : NEXT I
- 370 RETURN
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- FIGURE 6.1 FLOWCHART FOR THE SHORT RANGE SENSORS SUBROUTINE
-
- : SHORT.RANGE.SENSORS (400)
-
- ARE.SENSORS.DAMAGED =? (410)
- YES (1) DISPLAY.DAMAGED.MESSAGE
- NO (1) IS.QUADRANT.INSIDE.THE.GALAXY =?
- YES (2) COMPUTER.DAMAGED =? (430)
- NO (3) UPDATE.MAP.DATA
- THEN (3)
- THEN (2)
- DISPLAY.HEADING (440)
- DETERMINE.CURRENT.CONDITION
- DISPLAY.COLUMN.NUMBERS
- DISPLAY.CURRENT.SCORE
- LOOP (On rows)
- + LOOP (On columns in row) (450)
- + + DISPLAY.CONTENTS.OF SECTOR
- + + DISPLAY."SPACE"
- + LOOPEND
- + DISPLAY.GAME.STATUS.INFORMATION.ITEMS (460)
- + ADVANCE.DISPLAY.TO.NEXT.LINE
- LOOPEND (550)
- THEN (1) ;
-
- FIGURE 6.2 BASIC LANGUAGE IMPLEMENTATION OF SHORT RANGE SENSOR SUBROUTINE
-
- 400 REM SRS SHORT RANGE SENSORS
- 410 IF D(I)>0 THEN PRINT D$(I); " DAMAGED" : RETURN
- 420 IF Q1<0 OR Q1>7 OR Q2<0 OR Q2>7 THEN 440
- 430 IF D(5)=0 THEN Q(Q1,Q2)=ABS(Q(Q1,Q2))
- 440 GOSUB 70 : GOSUB 3400 : PRINT " 1 2 3 4 5 6 7 8";TAB(20); : GOSUB 170 : FOR I=0 TO 7 : PRINT I+Z ;
- 450 FOR J=0 TO 7 : PRINT MID$(S$,S(I,J),Z); " ";: NEXT J : PRINT TAB(20) ;
- 460 ON I+Z GOTO 470,480,490,500,510,520,530,540
- 470 PRINT "DAYS LEFT"; TAB(38);T : GOTO 550
- 480 PRINT "CONDITION "; TAB(38);C$ : GOTO 550
- 490 PRINT "SHIELDS"; TAB(38);E1 : GOTO 550
- 500 PRINT "ENERGY" ; TAB(38);E : GOTO 550
- 510 PRINT "PHOTON TORPEDOES";TAB(38);P : GOTO 550
- 520 PRINT "STARBASES";TAB(38);B9/10 : GOTO 550
- 530 PRINT "KLINGONS LEFT";TAB(38);K9/100 : GOTO 550
- 540 PRINT "KLINGONS CAPTURED";TAB(38);K4 : GOTO 550
- 550 NEXT I : RETURN
-
-
- 170 REM SUBROUTINE TO PRINT SCORE
- 180 N=INT(((K8-K9)/100)*(K5/2.5+K4+Z)^2*100/(T9-T)) : IF N<0 THEN N=0
- 190 PRINT "SCORE";TAB(38);N : RETURN
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- FIGURE 6.3 FLOWCHART FOR THE VISUAL COMMAND
-
- : VISUAL (2500)
-
- DISPLAY.HEADING (2510)
- LOOP (+/- 2 rows)
- + LOOP (+/- 2 columns)
- + + SECTOR.INSIDE.QUADRANT =? (2520)
- + + YES (1) DISPLAY.CONTENTS.OF.SECTOR
- + + NO (1) DISPLAY.$.SIGN (Out of Quadrant)
- + + THEN (1)
- + + DISPLAY.SPACE.CHARACTER (2540)
- + LOOPEND
- + ADVANCE.TO.NEXT.LINE
- LOOPEND
- SET.LAST.COMMAND.FLAG.=.SRS ;
-
- FIGURE 6.4 BASIC LANGUAGE IMPLEMENTATATION OF THE VISUAL SUBROUTINE
-
- 2500 REM VIS VISUAL
- 2510 GOSUB 70 : FOR I=S1-2 TO S1+2 : FOR J=S2-2 TO S2+2
- 2520 IF I<0 OR I>7 OR J<0 OR J>7 THEN PRINT "$"; : GOTO 2540
- 2530 PRINT MID$(S$,S(I,J),Z);
- 2540 PRINT " "; : NEXT : PRINT : NEXT : C9=Z : RETURN
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- FIGURE 6.5 FLOWCHART FOR SETTING UP CONTENTS OF A QUADRANT
-
- : SET.UP.QUADRANT (3200)
-
- CLEAR.ALL.SECTORS (3210)
- RESET.SECTOR.SCANNED.FLAG
- IS.QUADRANT.IN.GALAXY =)
- YES (1) COMPUTE.UP.NUMBER.OF.KLINGONS (3230)
- SET.UP.STARBASE.VALUE
- COMPUTE.UP.NUMBER.OF.STARS (3240)
- NO (1) CLEAR.STARBASE.COUNT
- SET.UP.ZERO.KLINGONS
- RANDOM.PROBABILITY.OF.SINGLE.STAR
- THEN (1)
- POSITION.ENTERPRISE (3250)
- STARBASE.IN.QUADRANT =?
- YES (2) POSITION.STARBASE (3260)
- THEN (2)
- LOOP (number of STARS) (3270)
- + POSITION.STAR
- ENDLOOP
- RESET.KLINGON.STATUS
- KLINGONS.IN.QUADRANT =?
- YES (3) LOOP (number of KLINGONS) (3300)
- + POSITION.KLINGON
- LOOPEND
- DISPLAY.RED.ALERT.MESSAGE
- SHIELDS.DOWN =?
- YES (4) DISPLAY.MESSAGE
- THEN (4)
- THEN (3) ; (3340)
-
- FIGURE 6.6 BASIC LANGUAGE VERSION OF THE SUBROUTINE FOR SETTING UP A QUADRANT
-
- 3200 REM SUBROUTINE TO SET UP QUADRANT
- 3210 FOR I=0 TO 7 : FOR J=0 TO 7 : S(I,J)=Z : NEXT J : NEXT I : S9=0
- 3220 IF Q1<0 OR Q1>7 OR Q2<0 OR Q2>7 THEN K=0 : B=0 : S=INT(RND(Z)*1.2) : GOTO 3250
- 3230 N=ABS(Q(Q1,Q2)) : K=INT(N/100) : N=N-K*100 : B=INT(N/10)
- 3240 S=ABS(Q(Q1,Q2))-(K*100+B*10)
- 3250 GOSUB 50 : S1=X : S2=Y : S(X,Y)=3 : IF B=0 THEN 3270
- 3260 GOSUB 50 : IF S(X,Y)<>Z THEN 3260 ELSE S(X,Y)=5
- 3270 FOR I=1 TO S : GOSUB 50 : IF S(X,Y)<>Z THEN 3280 ELSE S(X,Y)=2
- 3290 NEXT : FOR I=0 TO 7 : K3(I)=0 : NEXT : IF K=0 THEN 3340
- 3300 FOR I=1 TO K
- 3310 GOSUB 50 : IF S(X,Y)<>Z THEN 3310 ELSE S(X,Y)=4
- 3320 K1(I)=X : K2(I)=Y : K3(I)=RND(Z)*1000 : NEXT : PRINT : FOR I=Z TO 3 : PRINT "RED ALERT "; : NEXT
- 3330 PRINT CHR$(7) : IF E1=0 THEN PRINT "YOU FORGOT TO RAISE YOUR SHIELDS"
- 3340 RETURN
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- FIGURE 6.7 FLOWCHART TO DETERMINE THE CONDITION OF THE ENTERPRISE
-
- : TEST.AND.SET.CONDITION (3400)
-
- ENTERPRISE.NEXT.TO.STARBASE =? (3430)
- YES (1) CONDITION.DOCKED =? (3450)
- YES (2) UPDATE.PARAMETERS
- NO (2) KLINGONS.IN.QUADRANT =? (3460)
- YES (3) 50%.PROBABILITY. =?
- YES (4) <DOCK> (3470)
- DISPLAY.DOCKED.MESSAGE
- UPDATE.PARAMETERS
- SET.CONDITION.DOCKED
- THEN (4)
- NO (3) <DOCK>
- DISPLAY.DOCKED.MESSAGE
- UPDATE.PARAMETERS
- SET.CONDITION.DOCKED
- THEN (3)
- THEN (2)
- NO (1) KLINGONS.IN.QUADRANT =? (3490)
- YES (5) SET.CONDITION.RED
- NO (5) SUBSYSTEM.DAMAGED =? (3500)
- YES (6) SET.CONDITION.YELLOW
- NO (6) ENERGY.LOW =?
- YES (7) SET.CONDITION.YELLOW
- NO (7) SET.CONDITION.GREEN (3530)
- THEN (7)
- THEN (6)
- THEN (5)
- THEN (1) ; (3540)
-
- FIGURE 6.8 BASIC LANGUAGE VERSION OF SUBROUTINE TO SET UP THE CONDITION OF THE ENTERPRISE
-
- 3400 REM SUBROUTINE TO SET UP CONDITION
- 3410 FOR I=S1-Z TO S1+Z : FOR J=S2-Z TO S2+Z
- 3420 IF I<0 OR I>7 OR J<0 OR J>7 THEN 3440
- 3430 IF S(I,J)=5 THEN 3450
- 3440 NEXT J : NEXT I : GOTO 3490
- 3450 IF C$="DOCKED" THEN GOSUB 90 : GOSUB 3550 : GOTO 3540
- 3460 IF K>0 AND RND(Z)<.5 THEN 3490
- 3470 PRINT : PRINT D$(6);"LOWERED FOR DOCKING" : GOSUB 3550 : PRINT : PRINT "REPAIRS and REFUELLING completed"
- 3480 GOSUB 90 : T=T-.5 : C$="DOCKED": GOTO 3540
- 3490 IF K>0 THEN C$="RED" : GOTO 3540
- 3500 FOR I=0 TO C1-C2 : IF D(I)>0 THEN C$="YELLOW" : GOTO 3540
- 3510 NEXT : IF E=<E0/10 THEN C$="YELLOW" ELSE C$="GREEN"
- 3540 RETURN
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- FIGURE 7.1 FLOWCHART FOR THE ENDGAME SEQUENCE
-
- : ENDGAME (9000)
-
- FLAG.=.1 =? (9010)
- YES (1) RESIGNATION.ENDING (9020)
- NO (1) FLAG.=.2 =?
- YES (2) DESTROYED.BY.KLINGON (9040)
- NO (2) FLAG.=.3 =?
- YES (3) ENTERPRISE.RAN.OUT.OF.ENERGY (9080)
- NO (3) FLAG.=.4 =?
- YES (4) ALLOTED.TIME.OVER (9130)
- NO (4) PLAYER.WINS.GAME (9160)
- THEN (4)
- THEN (3)
- THEN (2)
- THEN (1)
- DISPLAY.SCORE (9180)
- NEW.GAME.DIALOG
- NEW.GAME.DESIRED =?
- YES (5) PROMPT.FOR.STANDBY (9220)
- RESET.FLAGS.AND.VARIABLES
- DISPLAY.MISSION.MESSAGE
- PLAY.THE.GAME
- NO (5) RETURN.TO.BASIC.COMMAND.LEVEL
- THEN (5) ;
-
- FIGURE 7.2 BASIC VERSION OF ENDGAME ROUTINE
-
- 9000 REM ENDGAME
- 9010 PRINT : ON F9 GOTO 9020,9040,9080,9130,9160
- 9020 REM F9=1 RESIGNATION ENDING
- 9030 GOTO 9180
- 9040 REM F9=2 CREAMED BY KLINGON
- 9050 PRINT "THE ENTERPRISE HAS BEEN DESTROYED "
- 9060 PRINT "You did not make such a good Captain, did you ? "
- 9070 GOTO 9180
- 9080 REM F9=3 RAN OUT OF ENERGY
- 9090 PRINT "The Enterprise has run out of energy." : PRINT
- 9100 PRINT "You have just condemed yourself and your crew to"
- 9110 PRINT "a horrible and un-necessary death."
- 9120 GOTO 9180
- 9130 REM F9=4 RAN OUT OF TIME
- 9140 PRINT "You did not complete your mission in time"
- 9150 GOTO 9180
- 9160 REM F9=5 PLAYER WON
- 9170 PRINT "CONGRATULATIONS you passed your test"
- 9180 PRINT : GOSUB 170 : INPUT "Do you want to play again (Yes/No) "; A$ : IF LEN(A$)=0 THEN 9180
- 9190 IF LEFT$(A$,Z)="N" THEN 9230
- 9200 IF LEFT$(A$,Z)<>"Y" THEN 9180
- 9210 REM START NEW GAME
- 9220 PRINT CHR$(26): PRINT : PRINT "WAIT FOR IT" : GOSUB 4660 : GOTO 30
- 9230 END
-
-
-
-
-
-
-
-
-
-
-
-
-
- FIGURE 7.3 FLOWCHART FOR THE MOVE SUBROUTINE
-
- : MOVE (NAVIGATION) (1300)
-
- DETERMINE.COURSE.DIRECTION (1310)
- DETERMINE.WARP.FACTOR (1320)
- WARP.FACTOR.<.MINIMUM =?
- NO (1) WARP.FACTOR.>.MAXIMUM =? (1330)
- YES (2) DISPLAY.ERROR.MESSAGE
- NO (2) WARPFACTOR.>.1 =? (1340)
- YES (3) ENGINES.DAMAGED =? (1350)
- YES (4) DISPLAY.DAMAGED.MESSAGE
- DIALOG.FOR.NEW.LEGAL.WARP.FACTOR
- THEN (4)
- KLINGONS.IN.QUADRANT =? (1370)
- YES (5) BACKFIRE
- GAMEOVER.FLAG.=.0 =?
- NO (6) MOVE.TO.NEW.SECTOR (1360)
- INSIDE.SAME.QUADRANT =? (1400)
- YES (7) SECTOR.OCCUPIED =? (1410)
- YES (8) BACK.UP.ONE
- COLLISION
- THEN (8)
- NO (7) MOVE.TO.NEW.QUADRANT (1500)
- THEN (7)
- TIME.FOR.RANDOM.EVENT =? (1570)
- YES (6) PERFORM.RANDOM.EVENT
- THEN (6)
- USE.ENERGY (1720)
- ENERGY.LEVEL.>0 =?
- YES (7) REPAIR.AS.YOU.GO (1730)
- SET.UP.CONDITION (1740)
- THEN (7)
- THEN (5)
- THEN (4)
- THEN (3)
- THEN (2)
- THEN (1) ; (1750)
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- FIGURE 7.4 FLOWCHART FOR THE COLLISION EVENT
-
- : COLLISION (1410)
-
- HIT.A.STAR =?
- YES (1) DISPLAY.MESSAGE (1420)
- FORTY.PERCENT.PROBABILITY =?
- YES (2) STARBASE.IN.QUADRANT =?
- YES (3) ENGINE.SHUT.DOWN
- BACK.UP.ONE.SECTOR
- NO (3) SPACE.WARP
- THEN (3)
- NO (2) ENGINE.SHUT.DOWN
- BACK.UP.ONE.SECTOR
- THEN (2)
- NO (1) HIT.A.KLINGON =?
- YES (4) DISPLAY.MESSAGE (1440)
- BACK.UP.ONE.SECTOR
- DAMAGE.SOMETHING
- THEN (4)
- (HIT.A.STARBASE)
- BACK.UP.ONE.SECTOR (1450)
- DISPLAY.MESSAGE
- KLINGONS.IN.QUADRANT =?
- YES (5) DISPLAY.MESSAGE (CLUMSY)
- NO (5) DISPLAY.MESSAGE (TRACTOR BEAM)
- THEN (5)
- THEN (1) ; (1480)
-
- FIGURE 7.5 FLOWCHART FOR THE MOVE.TO.NEW.QUADRANT
-
- : MOVE.TO.NEW.QUADRANT (1490)
-
- COMPUTE.QUADRANT.NUMBER (1500)
- ADJUST ELAPSED.TIME
- INSIDE.GALAXY =? (1510)
- YES (1) WAS.ENTERPRISE.OUTSIDE.GALAXY =? (1530)
- YES (2) DISPLAY.BOUNDARY.CROSSING.MESSAGE
- DAMAGE.SOMETHING
- SET.GALAXY.FLAG.=.INSIDE
- THEN (2)
- NO (1) (Outside)
- WAS.ENTERPRISE.INSIDE.GALAXY =? (1550)
- YES (3) DISPLAY.BOUNDARY.CROSSING.MESSAGE
- DAMAGE.SOMETHING
- SET.GALAXY.FLAG.=.OUTSIDE
- THEN (3)
- THEN (1)
- SET.UP.CONTENTS.OF.QUADRANT ; (1570)
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- FIGURE 7.6 FLOWCHART FOR THE DAMAGE.SOMETHING.EVENT
-
-
- : DAMAGE.SOMETHING (110)
-
- SELECT.RANDOM.SHIP.SUB.SYSTEM (120)
- SET.RANDOM.ESTIMATED.TIME.TO.REPAIR.(ETR)
- SET.DAMAGE.STATUS
- DISPLAY.SUB-SYSTEM.DAMAGED.MESSAGE ;
-
- FIGURE 7.7 BASIC LANGUAGE VERSION OF SUBROUTINE TO MOVE THE ENTERPRISE PAGE #
-
- 1300 REM NAV/WARP ENGINES/NAVIGATION
- 1310 INPUT "DIRECTION PLEASE (1-9) ";C : IF C<1 OR C>9 THEN 1310
- 1320 INPUT "WARP FACTOR ";W : IF W=<0 THEN 1750
- 1330 IF W>8 THEN PRINT " SIR WE CANNA GO THAT FAST" : GOTO 1320
- 1340 IF D(0)=0 THEN 1360
- 1350 IF W>=Z THEN PRINT D$(I);"DAMAGED (maximum allowable=.9) " : GOTO 1320
- 1360 REM MOVE ON
- 1370 S(S1,S2)=Z : T1=T : IF K>0 AND W>=Z THEN GOSUB 600 : IF F9>0 THEN 1750
- 1380 Y1=S1+.5 : X1=S2+.5 : Y=(C-Z)*.785398 : X=COS(Y) : Y=-SIN(Y)
- 1390 FOR I=0 TO INT(W*8) : T=T-.1 : Y1=Y1+Y : X1=X1+X : Y2=INT(Y1) : X2=INT(X1)
- 1400 IF X2<0 OR X2>7 OR Y2<0 OR Y2>7 THEN 1490
- 1410 ON S(Y2,X2) GOTO 1470,1420,1470,1440,1450
- 1420 PRINT "STAR DEAD AHEAD" : IF RND(Z)>.6 AND B=0 THEN 1640
- 1430 PRINT "EMERGENCY ENGINE SHUT DOWN" : D(0)=D(0)+.5 : GOSUB 1780 : GOTO 1720
- 1440 PRINT : PRINT "STAND BY FOR COLLISION WITH KLINGON" : GOSUB 1780 : GOSUB 110 : GOTO 1720
- 1450 GOSUB 1780 : PRINT : PRINT "MESSAGE FROM STARBASE" : IF K>0 THEN PRINT "CLUMSY" : GOTO 1720
- 1460 PRINT "ENTERPRISE CAUGHT IN TRACTOR BEAM BEFORE COLLISION" : GOTO 1720
- 1470 NEXT : S1=Y2 : S2=X2 : S(Y2,X2)=3 : GOTO 1580
- 1490 REM-OUT OF SECTOR
- 1500 Q1=INT(Q1+W*Y+(S1+.5)/8) : Q2=INT(Q2+W*X+(S2+.5)/8) : T=T-.6
- 1510 IF Q1<0 OR Q1>7 OR Q2<0 OR Q2>7 THEN 1550
- 1520 REM INSIDE GALAXY
- 1530 IF G9=Z THEN GOSUB 1760 : G9=0
- 1540 GOTO 1570
- 1550 IF G9=0 THEN GOSUB 1760 : G9=Z
- 1570 GOSUB 3200
- 1580 I=INT(RND(Z)*100) : IF I=0 OR I>4 THEN 1720
- 1590 IF G9=Z THEN 1680
- 1600 PRINT : IF B>0 THEN 1720
- 1610 ON I GOTO 1620,1640,1670,1680
- 1620 PRINT CHR$(7);"KLINGON SPACE MINE " : H=RND(Z)*400 : GOSUB 130 : IF F9>0 THEN 1750
- 1630 PRINT "SHIELDS DOWN TO"; E1; " UNITS" : GOTO 1720
- 1640 PRINT "SPACE WARP DUE TO GRAVITATIONAL ANOMALY" : GOSUB 50 : Q1=INT(X-P) : Q2=INT(Y-P)
- 1650 G9=0 : IF Q1<0 OR Q1>7 OR Q2<0 OR Q2>7 THEN G9=Z
- 1660 PRINT "SENSORS SHOW WE SEEM TO HAVE MOVED TO QUADRANT"; Q1+Z;",";Q2+Z : GOSUB 3200 : GOTO 1740
- 1670 PRINT CHR$(7);"ION STORM " : GOSUB 110 : GOTO 1720
- 1680 REM SPOCK DOES HIS FIXING HERE
- 1690 GOSUB 50 : FOR I=X TO C1-C2 : IF D(I)>0 THEN 1710
- 1700 NEXT : FOR I=0 TO X : IF D(I)<=0 THEN NEXT : GOTO 1720
- 1710 D(I)=0 : PRINT " Mr. SPOCK FIXED the ";D$(I)
- 1720 E=E-((INT(W*8))^2)/2 : IF E<0 THEN F9=3 : GOTO 1750
- 1730 GOSUB 1800 : IF E1>E THEN E1=E
- 1740 GOSUB 3400
-
-
-
-
-
-
-
-
-
-
-
- 1750 RETURN
- 1760 PRINT "CROSSING BARRIER at GALACTIC BOUNDARY" : GOSUB 110 : RETURN
- 1780 REM SUBROUTINE TO BACK UP ONE SECTOR
- 1790 S1=INT(Y1-Y) : S2=INT(X1-X) : S(S1,S2)=3 : RETURN
- 1800 REM SUBROUTINE FOR REPAIRS AFTER TIME (T1-T)
- 1810 IF T<0 THEN F9=4 : GOTO 1870
- 1820 N=0 :FOR I=0 TO C1-C2 : IF D(I)=<0 THEN 1860
- 1830 D(I)=D(I)-(T1-T) : IF D(I)>0 THEN 1860
- 1840 IF N=0 THEN PRINT : PRINT "DAMAGE CONTROL REPORTING " : N=Z
- 1850 D(I)=0 : PRINT D$(I);"REPAIRED"
- 1860 NEXT
- 1870 RETURN
-
- 110 REM SUBROUTINE TO DAMAGE SOMETHING
- 120 Y=Z+RND(Z)*W : X=INT((C1-C2)*RND(Z)) : D(X)=Y+D(X) : PRINT D$(X); "DAMAGED" : RETURN
- 130 REM ENERGY HIT SUBROUTINE
- 140 E1=E1-H : E=E-H : IF E1=<0 THEN F9=2 : GOTO 160
- 150 IF H>E1/2 THEN PRINT "SHIELD OVERLOAD ....."; : GOSUB 110
- 160 RETURN
-
-
- FIGURE 7.8 COMPASS (BEARING) DIRECTIONS
-
-
- 4 3 2
-
- \ : /
- \ : /
- \ : /
- \:/
- 5 -----+---- 1 (9)
- /:\
- / : \
- / : \
- / : \
-
- 6 7 8
-
- NOTE: Fractional directions are allowed and encouraged
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- FIGURE 7.9 FLOWCHART FOR ON BOARD REPAIRS
-
- : REPAIR.AS.WE.GO
- OUT.OF.TIME =?
- YES (1) SET.END.OF.GAME.FLAG
- NO (2) RESET.REPAIRED.SOMETHING.FLAG 1820
- LOOP (Number of On-board systems)
- + SYSTEM.DAMAGED =?
- + YES (2) UPDATE.ETR
- + IS.IT.FIXED =?
- + YES (3) IS.IT.FIRST.ONE.THIS.TIME =?
- + YES (4) DISPLAY.DAMAGE.CONTR[.MESSAGE
- + SET.REPAIE[.SOMETHING.FLAG
- + THEN (4)
- + DISPLAY.FIXED.MESSAGE
- + THEN (4)
- + THEN (2)
- LOOPEND
- THEN (1) ;
-
-
- 1800 REM SUBROUTINE FOR REPAIRS AFTER TIME (T1-T)
- 1810 IF T<0 THEN F9=4 : GOTO 1870
- 1820 N=0 :FOR I=0 TO C1-C2 : IF D(I)=<0 THEN 1860
- 1830 D(I)=D(I)-(T1-T) : IF D(I)>0 THEN 1860
- 1840 IF N=0 THEN PRINT : PRINT "DAMAGE CONTROL REPORTING " : N=Z
- 1850 D(I)=0 : PRINT D$(I);"REPAIRED"
- 1860 NEXT
- 1870 RETURN
-
-
- FIGURE 7.10 FLOWCHART TO DAMAGE SOMETHING
-
- : DAMAGE.SOMETHING
- SET.RANDOM[.TIME
- SET.RANDOM.SUB.SYSTEM
- ADD.TIME.TO.SUBSYSTEM.ETR
- DISPLAY.WHICH.SYSTEM.WAS.DAMAGED ;
-
- FIGURE 7.12 FLOWCHART FOR ENERGY HIT
-
- ENERGYHIT
- DEDUCT.HIT.FROM.ON.BOARD.ENERGY
- DEDUCT.HIT.FROM.SHIELDS
- SHIELDS.BEATEN.DOWN =?
- YES (1) (ENTERPRISE.DESTROYED)
- SET.END.OF.GAME.FLAG
- NO (1) MASSIVE.HIT =?
- YES (2) DISPLAY.OVERLOAD.MESSAGE
- DAMAGE.SOMETHING
- THEN (2)
- THEN (1) ;
-
-
- : PHOTON.TORPEDO (1000)
-
-
-
-
-
-
-
-
- FIGURE 8.1 FLOWCHART FOR THE PHOTON TORPEDO SUBROUTINE PAGE 21
-
-
-
- ARE.TUBES.DAMAGED (1010)
- YES (1) DISPLAY.DAMAGED.MESSAGE
- NO (1) ANY.LEFT =? (1020)
- YES (2) DIALOG.TO.SET.DIRECTION (1030)
- SET.MOVE.PARAMETERS (1040)
- LOOP (TORPEDO.IN.SECTOR) (1050)
- + MOVE.TORPEDO.ONE.SECTOR
- + OUTSIDE.QUADRANT =? (1060)
- + YES (3) DISPLAY.MISSED.MESSAGE
- + NO (3) DISPLAY.TRACK (1070)
- + IS.SECTOR.OCCUPIED =?
- + YES (4) IS.IT.A.KLINGON =?
- + YES (5) DID.IT.DODGE.THE.TORPEDO =? (1100)
- + NO (5A) DELETE.IT.FROM.QUADRANT (1220)
- + UPDATE.GAME.STATUS.DISPLAY
- + DISPLAY.HIT.MESSAGE
- + THEN (5A)
- + NO (5) IS.IT.A.STAR
- + YES (6) WAS.TORPEDO.ABSORBED.BY.STAR =?
- + YES (6A) DISPLAY.ABSORBED.MESSAGE (1080)
- + NO (6A) DISPLAY.DEFLECTED.MESSAGE (1090)
- + CHANGE.COURSE.PARAMETERS
- + THEN (6A)
- + NO (6) IS.IT.A.STARBASE =?
- + YES (7) DESTROY.STARBASE (1150)
- + DISPLAY.MESSAGES
- + NO (7) (Must be the ENTERPRISE) (1190)
- + DISPLAY.EVASIVE.ACTION.MESSAGE
- + THEN (7)
- + THEN (6)
- + THEN (5)
- + THEN (4)
- + THEN (3)
- LOOPEND (1200)
- NO (2) DISPLAY.ALL.GONE.MESSAGE
- THEN (2)
- THEN (1) ;
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- FIGURE 8.2 BASIC LANGUAGE IMPLEMENTATION OF PHOTON TORPEDO SUBROUTINE PAGE 22
-
-
- 1000 REM TOR PHOTON TORPEDOES
- 1010 IF D(I) > 0 THEN PRINT "TUBES BLOCKED" : GOTO 1210
- 1020 IF P = 0 THEN PRINT "NO TORPEDOE's LEFT SIR !" : GOTO 1210
- 1030 INPUT "DIRECTION (1-9) ";C : IF C<1 OR C>9 THEN 1030
- 1040 Y1=S1+.5 : X1=S2+.5 : Y=(C-Z)*.785398 : X=COS(Y) : Y=-SIN(Y) : PRINT "TRACK"
- 1050 P=P-Z : FOR J=0 TO E0 : Y1=Y1+Y : X1=X1+X : Y2=INT(Y1) : X2=INT(X1)
- 1060 IF X2<0 OR X2>7 OR Y2<0 OR Y2>7 THEN PRINT "MISSED" : GOTO 1210
- 1070 PRINT Y2+Z;",";X2+Z : ON S(Y2,X2) GOTO 1200,1080,1190,1100,1150
- 1080 PRINT "STAR "; : IF RND(Z)<.5 THEN PRINT "ABSORBED TORPEDO" : GOTO 1210
- 1090 PRINT "DEFLECTED TORPEDO" : Y=Z+RND(Z)*8*.785398 : X=COS(Y) : Y=-SIN(Y) : GOTO 1200
- 1100 IF RND(Z)>.9 THEN 1200
- 1110 PRINT " KLINGON DESTROYED"
- 1120 FOR I=0 TO 7 : IF Y2=K1(I) AND X2=K2(I) THEN 1140
- 1130 NEXT I : PRINT "SENSOR MALFUNCTION";CHR$(7)
- 1140 K3(I)=0 : GOSUB 1220 : GOTO 1180
- 1150 PRINT " STARBASE DESTROYED, WELL DONE" : B=B-Z : B9=B9-10 : K8=K9 : T9=T+Z
- 1160 IF Q(Q1,Q2)<0 THEN Q(Q1,Q2)=Q(Q1,Q2)+10 ELSE Q(Q1,Q2)=Q(Q1,Q2)-10
- 1170 IF B9=0 THEN PRINT : PRINT "THAT WAS YOUR LAST STARBASE"
- 1180 S(Y2,X2)=Z : GOTO 1210
- 1190 PRINT CHR$(7);"EVASIVE ACTION ....missed us"
- 1200 NEXT J
- 1210 RETURN
- 1220 REM SUBROUTINE TO CLEAR KLINGON FROM SIMULATION
- 1230 K=K-Z : K9=K9-100 : IF K9=0 THEN F9=5
- 1240 IF Q(Q1,Q2)<0 THEN Q(Q1,Q2)=Q(Q1,Q2)+100 ELSE Q(Q1,Q2)=Q(Q1,Q2)-100
- 1250 RETURN
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- FIGURE 8.3 FLOWCHART FOR THE PHASER FUNCTION PAGE 23
-
-
- : PHASER.FIRE (800)
-
- KLINGONS.IN.QUADRANT =? (810)
- YES (1) PHASERS.WORKING =? (820)
- YES (2) SHORT.RANGE.SENSORS.WORKING =? (830)
- NO (3) DISPLAY.BEST.GUESS.MESSAGE
- THEN (3)
- ALLOCATE.ENERGY.TO.PHASER.CONTROL (840)
- SUBTRACT.ENERGY.FROM.SHIPSPOWER (850)
- LOOP (on Klingons in Quadrant) (860)
- + COMPUTE.HIT (880)
- + DECREMENT.ITS.SHIELD.POWER
- + DISPLAY.HIT.MESSAGE
- + SHIELD.DOWN =? (<=0)
- + YES (4) DELETE.IT.FROM.QUADRANT
- + UPDATE.GAME.STATUS
- + THEN (4) KLINGONS'S.SHIELD.LOW =?
- + YES (5) KLINGON.SURRENDERS =?
- + YES (6) DELETE.IT.FROM.QUADRANT
- + UPDATE.GAME.STATUS
- + BOARDING.PARTY.OPERATION
- + NO (6) KLINGON.SELFDESTRUCTS = ?
- + YES (7) DELETE.IT.FROM.QUADRANT
- + UPDATE.GAME.STATUS.DISPLAY
- + THEN (7)
- + THEN (6)
- + THEN (5)
- + THEN (4)
- LOOPEND
- NO (2) DISPLAY.NOT.WORKING.MESSAGE
- THEN (2)
- NO (1) DISPLAY.MESSAGE.THAT.NO.TARGETS.IN.SECTOR
- THEN (1) ;
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- FIGURE 8.4 BASIC LANGUAGE IMPLEMENTATION OF PHASER COMMAND
-
-
- 800 REM PHA PHASERS
- 810 IF K=0 THEN PRINT "No targets in quadrant ....... sir " : GOTO 950
- 820 IF D(I)>0 THEN PRINT D$(I);"OUT OF ACTION SIR" : GOTO 950
- 830 IF D(1)>0 THEN PRINT D$(1);"are not working, will use best guess settings"
- 840 INPUT "READY- how much energy do you want to fire "; X : IF X<=0 THEN 950
- 850 IF X>(E-E1) THEN PRINT "We don't have that much energy available sir" : GOTO 840
- 860 E = E - X : Y = K : FOR I = 0 TO 7 : IF K3(I)<=0 THEN 940
- 870 IF D(1)>0 THEN X = X*RND(Z)
- 880 H = X/(Y*(SQR((K1(I)-S1)^2+(K2(I)-S2)^2)^.4)) : K3(I) = K3(I) - H
- 890 PRINT "Hit on KLINGON at";K1(I)+Z;",";K2(I)+Z; : IF D(1)=0 THEN PRINT "(";K3(I);"Units left)" ELSE PRINT
- 900 IF K3(I)<=0 THEN K3(I) = 0 : PRINT "KLINGON DESTROYED" : S(K1(I),K2(I)) = Z : GOSUB 1220 : GOTO 940
- 910 IF K>Z OR K3(I)>E1/100 OR RND(Z)>.4 THEN 940
- 920 K3(I)=0 : S(K1(I),K2(I))=Z : GOSUB 1220 : IF RND(Z)<.7 THEN PRINT "KLINGON EXPLODED" : K5=K5+Z : GOTO 940
- 930 PRINT "KLINGON SURRENDERS .....Boarding party away" : K4 = K4 + Z : T1 = T : T = T - .5 : GOSUB 1800
- 940 NEXT
- 950 RETURN
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- FIGURE 8.5 FLOWCHART FOR SHIELDS COMMAND
-
-
-
- : SHIELDS (2700)
-
- IS.ENTERPRISE.DOCKED =? (2710)
- YES (1) DISPLAY.RULES.MESSAGE
- NO (1) ARE.SHIELDS.DAMAGED =? (2720)
- YES (2) DISPLAY.DAMAGED.MESSAGE
- NO (2) DIALOG.TO.AND.ASSIGN.ENERGY.TO.SHIELDS (2740)
- THEN (2)
- THEN (1) ;
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- FIGURE 8.6 BASIC LANGUAGE IMPLEMENTATION OF SHIELDS COMMAND
-
-
- 2700 REM SHE SHIELDS
- 2710 IF C$="DOCKED" THEN PRINT "Regulations forbid raising the shields when docked" : GOTO 2770
- 2720 IF D(I)>0 THEN PRINT D$(I)+"DAMAGED" : GOTO 2770
- 2730 PRINT D$(I);"currently at";E1;"Units"
- 2740 INPUT "How much energy to divert to the shields Sir ";N : IF N<0 THEN 2740
- 2750 IF N>E THEN PRINT "WE DON'T HAVE THAT MUCH SIR" : GOTO 2740
- 2760 E1=N
- 2770 RETURN
-
-
- : SHOOTBACK (ROUTINE FOR KLINGONS SHOOTING BACK) (600)
-
- IS.ENTERPRISE.DOCKED =? (610)
- NO (1) LOOP (0 to 7) (620)
- + GAME.OVER.FLAG.SET =?
- + NO (2) KLINGON.ACTIVE =?
- + YES (3) HOSTILE.ACTION =?
- + YES (4) TORPEDO.FIRED =?
- + YES (5) TORPEDO.HIT =?
- + YES (6) DAMAGE.SOMETHING
- + NO (6) DISPLAY.MISS.MESSAGE
- + THEN (6)
- + NO (5) (PHASER) (640)
- + COMPUTE.ENERGY.FIRED
- + UPDATE.KLINGON.ENERGY.SUPPLY
- + COMPUTE.ENERGY.IN.HIT
- + UPDATE.ENTERPRISE.SHIELDS
- + SHIELDS.LESS.THAN.0 =?
- + YES (7) SET.GAME.OVER.FLAG
- + THEN (7)
- + MASSIVE.HIT =?
- + YES (8) DAMAGE.SOMETHING
- + THEN (8)
- + THEN (5)
- + THEN (4)
- + THEN (3)
- + THEN (2)
- LOOPEND
- SHIELDS.LOW =?
- YES (6) DISPLAY.WARNING.MESSAGE
- THEN (6)
- THEN (1) ;
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- FIGURE 9.2 BASIC LANGUAGE VERSION OF SHOOTBACK FUNCTION
-
-
-
- 600 REM SHOOTBAK SUBROUTINE
- 610 IF C$="DOCKED" THEN 680
- 620 FOR I=0 TO 7 : IF K3(I)<=0 OR RND(Z)<.1*(I+Z) THEN 670
- 630 IF RND(Z)>K3(I)/500 THEN PRINT "KLINGON TORPEDO"; : H=RND(Z)*E1 : E1=E1+H : E=E+H : GOTO 660
- 640 H=K3(I)*.4*RND(Z) : K3(I)=K3(I)-H : H=H/(SQR((K1(I)-S1)^2+(K2(I)-S2)^2))^.4
- 650 PRINT H;"Unit hit on Enterprise";
- 660 PRINT " from sector";K1(I)+Z;",";K2(I)+Z : GOSUB 130 : IF F9>0 THEN 680
- 670 NEXT : IF E1<100 THEN PRINT D$(6);" Dangerously low";CHR$(7)
- 680 RETURN
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- FIGURE 9.3 ALTERNATE FORM OF THE SHOOTBACK SUBROUTINE
-
-
-
- (600) REM SHOOTBAK SUBROUTINE
- (610) IF C$="DOCKED" THEN 680
- (620) FOR I=0 TO 7 : IF K3(I)<=0 OR RND(Z)<.1*(I+Z) THEN 670
- (630) IF RND(Z)>K3(I)/500
- PRINT "KLINGON TORPEDO"; : H=RND(Z)*E1 : E1=E1+H : E=E+H
- ELSE (640) H=K3(I)*.4*RND(Z) : K3(I)=K3(I)-H : H=H/(SQR((K1(I)-S1)^2+(K2(I)-S2)^2))^.4
- (650) PRINT H;"Unit hit on Enterprise";
- THEN (660) PRINT " from sector";K1(I)+Z;",";K2(I)+Z
- (130) REM ENERGY HIT SUBROUTINE
- (140) E1=E1-H : E=E-H
- IF E1=<0 THEN F9=2 : GOTO 160
- (150) IF H>E1/2 THEN PRINT "SHIELD OVERLOAD ....."; : GOSUB 110
- IF F9>0 THEN 680
- ELSE
- (670) NEXT :
- THEN IF E1<100 THEN PRINT D$(6);" Dangerously low";CHR$(7)
- (680) RETURN
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- FIGURE 9.4 FLOWCHART FOR MOVING KLINGONS AROUND
-
-
-
- : MOVEKLINGON (700)
-
- LOOP ( 7 times (number of possible KLINGONS in quadrant) )
- + KLINGON.ACTIVE =? (710)
- + YES (1) FIND.RANDOM.SECTOR (720)
- + SECTOR.EMPTY =?
- + YES (2) MOVE.KLINGON.INTO.IT (730)
- + THEN (2)
- + THEN (1)
- LOOPEND ; (740)
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- FIGURE 9.5 BASIC LANGUAGE VERSION OF MOVE KLINGON FUNCTION
-
-
-
- 700 REM MOVE KLINGON ROUTINE
- 710 FOR I=0 TO 7 : IF K3(I)<=0 THEN 740
- 720 GOSUB 50 : IF S(X,Y)<>Z THEN 740
- 730 S(K1(I),K2(I))=Z : K1(I)=X : K2(I)=Y : S(X,Y)=4
- 740 NEXT : RETURN
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- FIGURE 9.6 FLOWCHART OF THE IMPLEMENTATION OF THE RESIGN COMMAND
-
-
-
- : RESIGN (2600)
-
- KLINGONS.IN.QUADRANT =? (2610)
- YES (1) SURRENDER.NOT.ALLOWED
- NO (1) REQUEST.CONFIRMATION (2620)
- RESIGN.WANTED =?
- YES (2) SET.END.OF.GAME.FLAG.TO.'RESIGN' (2640)
- THEN (2)
- THEN (1) ;
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- FIGURE 9.7 BASIC LANGUAGE IMPLEMENTATION OF RESIGN COMMAND
-
-
-
- 2600 REM RES RESIGN
- 2610 IF K>0 THEN PRINT : PRINT "YOUR SURRENDER WILL NOT BE ACCEPTED " : GOTO 2650
- 2620 INPUT "ARE YOU SURE (Yes/No) ";A$ : IF LEN(A$)=0 THEN 2620
- 2630 IF LEFT$(A$,Z)="N" THEN 2660
- 2640 IF LEFT$(A$,Z)="Y" THEN F9=Z
- 2650 GOTO 2620
- 2660 RETURN
-
- FIGURE 9.8 TRANSPORTER FLOWCHART
-
- IS.IT.DAMAGED =? (3600)
- YES (1) PRINT.DAMAGED.MESSAGE
- NO (1) ARE.SHORT.RANGE.SENSORS.DAMAGED =?
- YES (2) DISPLAY.DAMAGED.MESSAGE
- NO (2) IS.QUADRANT.SCANNED =? (3630)
- YES (3) ARE.SHIELDS.UP =? (3640)
- YES (4) DISPLAY.WARNING.MESSAGE
- NO (4) ANY.KLINGONS.IN.QUADRANT (3650)
- YES (5) DISPLAY.WARNING.MESSAGE
- NO (5) DIALOG.TO.INPUT.DESTINATION.CO-ORDINATES (3660)
- ARE.CO=ORDINATES.BLANK =?
- YES (6) COMPUTE.ENERGY.REQUIRED.TO.TRANSPORT.THERE (3680)
- IS.THE.ENERGY.AVAILABLE =?
- YES (7) ADJUST.ENTERPRISE.ENERGY.LEVELS (3690)
-
- NO (7) PRINT.WARNING
- THEN (7)
- NO (6) PRINT.THERE.IS.NOTHING.AT.THOSE.CO-ORDINATES
- THEN (6)
- THEN (5)
- THEN (4)
- NO (3) DISPLAY.MESSAGE.STATING.THAT.FACT
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-